import { deviceMappings } from "./deviceMappings"; // 引入 JSON 配置文件
import { DeviceLogTypeEnums } from "@/enums/DeviceLogTypeEnums";

// 定义设备数据接口
export class DeviceLogModel {
  id?: number; // 设备唯一标识
  data_type?: string | null; // 数据上报类型
  device_sn?: string; // 设备序列号
  basic_data?: string; // 基础数据，json字符串
  ext_data?: string; // 扩展数据，json字符串
  device_category?: string; // 设备类别，例如 "跌倒报警器"
  device_model?: string; // 设备型号
  color?: string;
  create_time?: string; // 创建时间
  update_time?: string; // 更新时间

  constructor(data: Partial<DeviceLogModel>) {
    Object.assign(this, data);
  }

  static byObject(data: any): DeviceLogModel {
    return new DeviceLogModel(data);
  }

  /**
   * @description 设备数据上报类型
   * @returns  string
   */
  getDataTypeString(): string {
    switch (this.data_type) {
      case DeviceLogTypeEnums.GET:
        return "数据获取";
      case DeviceLogTypeEnums.POST:
        return "数据上报";
      case DeviceLogTypeEnums.SET:
        return "数据下发";
      default:
        return "unknown";
    }
  }

  /**
   * @description 设备数据上报内容
   * @returns  string
   */
  getContentString(): string {
    if (!this.device_model || !this.ext_data) return "";
    try {
      const extData = JSON.parse(this.ext_data); // 解析 ext_data 为对象
      return this.getDeviceSpecificContent(extData);
    } catch (error) {
      console.error("解析 ext_data 失败:", error);
      return "";
    }
  }

  /**
   * 根据设备模型和 ext_data 获取特定内容
   */
  private getDeviceSpecificContent(extData: Record<string, string>): string {
    if (!this.device_model) return "";
    const deviceConfig = (deviceMappings as any).devices[this.device_model];
    if (!deviceConfig) return "";

    const fields = deviceConfig.fields;
    const valueMaps = deviceConfig.valueMaps;

    let content = "";
    for (const key in extData) {
      if (fields[key] != undefined) {
        const fieldName = fields[key];
        const valueMap = valueMaps[key];
        const mappedValue = valueMap ? valueMap[extData[key]] : extData[key];
        content += `${fieldName}${fieldName ? ":" : ""}${mappedValue || "未知"}; `;
      }
    }

    return content.trim() ? content : "";
  }
}
